/**
 * 产品类别列表页面逻辑
 */

// 清理可能存在的旧实例
if (typeof categoryList !== 'undefined' && categoryList.table) {
    try {
        categoryList.table.destroy();
        $('#categoryTable').empty();
    } catch (e) {
        console.log('清理旧类别列表实例:', e);
    }
}

var categoryList = {
    table: null,
    
    init() {
        this.initTable();
        this.loadParentCategories();
    },
    
    initTable() {
        this.table = $('#categoryTable').DataTable({
            processing: true,
            serverSide: false,
            ajax: {
                url: API_CONFIG.BASE_URL + '/categories',
                type: 'GET',
                dataSrc: function(json) {
                    console.log('类别数据:', json);
                    return json.data || [];
                },
                error: function(xhr, error, thrown) {
                    console.error('加载类别列表失败:', error, thrown);
                    console.error('响应:', xhr.responseText);
                    utils.error('加载类别列表失败');
                }
            },
            columns: [
                { data: 'categoryId', className: 'text-center' },
                { 
                    data: 'categoryName',
                    render: function(data, type, row) {
                        return row.level === 2 ? `&nbsp;&nbsp;└─ ${data}` : data;
                    }
                },
                {
                    data: 'parentId',
                    className: 'text-center',
                    render: function(data) {
                        return data === 0 ? '-' : '顶级类别';
                    }
                },
                { 
                    data: 'level',
                    className: 'text-center',
                    render: function(data) {
                        return `第${data}级`;
                    }
                },
                { data: 'sortOrder', className: 'text-center' },
                {
                    data: 'status',
                    className: 'text-center',
                    render: function(data) {
                        return data === 1 
                            ? '<span class="badge bg-success">启用</span>'
                            : '<span class="badge bg-secondary">禁用</span>';
                    }
                },
                {
                    data: 'createTime',
                    className: 'text-center',
                    render: function(data) {
                        return utils.formatDate(data);
                    }
                },
                {
                    data: null,
                    orderable: false,
                    className: 'text-center',
                    render: function(data, type, row) {
                        return `
                            <button class="btn btn-sm btn-primary" onclick="categoryList.edit(${row.categoryId})">
                                编辑
                            </button>
                            <button class="btn btn-sm btn-danger" onclick="categoryList.delete(${row.categoryId})">
                                删除
                            </button>
                        `;
                    }
                }
            ],
            language: {
                processing: "处理中...",
                search: "搜索:",
                lengthMenu: "显示 _MENU_ 条",
                info: "显示第 _START_ 至 _END_ 项，共 _TOTAL_ 项",
                infoEmpty: "显示第 0 至 0 项，共 0 项",
                infoFiltered: "(由 _MAX_ 项结果过滤)",
                emptyTable: "暂无数据",
                zeroRecords: "没有找到匹配的数据",
                paginate: {
                    first: "首页",
                    previous: "上页",
                    next: "下页",
                    last: "末页"
                }
            },
            pageLength: 25,
            order: [[4, 'asc'], [0, 'asc']]
        });
    },
    
    async loadParentCategories() {
        try {
            const res = await categoryApi.getAll();
            const categories = res.data || [];
            
            const select = $('#parentId');
            select.html('<option value="0">无（顶级类别）</option>');
            
            categories.filter(c => c.level === 1).forEach(cat => {
                select.append(`<option value="${cat.categoryId}">${cat.categoryName}</option>`);
            });
        } catch (error) {
            console.error('加载父类别失败:', error);
        }
    },
    
    showAddDialog() {
        $('#categoryFormModal .modal-title').text('添加类别');
        $('#categoryForm')[0].reset();
        $('#categoryId').val('');
        $('#sortOrder').val('0');
        $('#status').val('1');
        
        new bootstrap.Modal('#categoryFormModal').show();
    },
    
    async edit(id) {
        try {
            utils.showLoading('加载中...');
            const res = await categoryApi.getById(id);
            utils.hideLoading();
            
            console.log('编辑类别API响应:', res);
            console.log('类别数据:', res.data);
            
            // 修复：API返回 { code, message, data }，res.data就是实际数据
            const category = res.data;
            
            if (!category) {
                utils.error('加载类别数据失败');
                return;
            }
            
            $('#categoryFormModal .modal-title').text('编辑类别');
            $('#categoryId').val(category.categoryId);
            $('#categoryName').val(category.categoryName);
            $('#parentId').val(category.parentId || 0);
            $('#sortOrder').val(category.sortOrder || 0);
            $('#status').val(category.status);
            
            const modal = new bootstrap.Modal('#categoryFormModal');
            modal.show();
            
        } catch (error) {
            utils.hideLoading();
            console.error('加载类别失败:', error);
            utils.error('加载类别失败：' + (error.message || '未知错误'));
        }
    },
    
    async save() {
        const id = $('#categoryId').val();
        const data = {
            categoryName: $('#categoryName').val().trim(),
            parentId: parseInt($('#parentId').val()),
            sortOrder: parseInt($('#sortOrder').val()) || 0,
            status: parseInt($('#status').val())
        };
        
        if (!data.categoryName) {
            utils.error('请输入类别名称');
            return;
        }
        
        try {
            utils.showLoading('保存中...');
            
            if (id) {
                await categoryApi.update(id, data);
            } else {
                await categoryApi.create(data);
            }
            
            utils.hideLoading();
            utils.success('保存成功');
            
            bootstrap.Modal.getInstance('#categoryFormModal').hide();
            this.table.ajax.reload();
            this.loadParentCategories();
            
        } catch (error) {
            utils.hideLoading();
            console.error('保存类别失败:', error);
        }
    },
    
    async delete(id) {
        const confirmed = await utils.confirm('确定要删除这个类别吗？', '删除确认');
        if (!confirmed) return;
        
        try {
            utils.showLoading('删除中...');
            await categoryApi.delete(id);
            utils.hideLoading();
            
            utils.success('删除成功');
            this.table.ajax.reload();
            this.loadParentCategories();
            
        } catch (error) {
            utils.hideLoading();
            console.error('删除类别失败:', error);
        }
    }
};

$(document).ready(function() {
    if (categoryList.table) {
        try {
            categoryList.table.destroy();
        } catch (e) {
            console.log('销毁旧DataTable:', e);
        }
    }
    categoryList.init();
});

